package main

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-10 13:35:45
 * @Description:
 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
*/

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-10 13:36:00
 * @Description: 思路 使用栈操作
 */
func isValid(s string) bool {
	var stack []rune = make([]rune, len(s))
	var index int = -1 //栈顶指针
	for _, c := range s {
		switch c {
		case '(':
			//入栈
			index++
			stack[index] = c
		case ')':
			//出栈
			if index < 0 {
				return false
			}
			if stack[index] != '(' {
				return false
			}
			index--

		case '[':
			//入栈
			index++
			stack[index] = c

		case ']':
			//出栈
			if index < 0 {
				return false
			}
			if stack[index] != '[' {
				return false
			}
			index--

		case '{':
			//入栈
			index++
			stack[index] = c

		case '}':
			//出栈
			if index < 0 {
				return false
			}
			if stack[index] != '{' {
				return false
			}
			index--

		}

	}
	return index == -1
}
